#include <malloc.h> требуется только для объявления функции
char *_expand(ptr,size);
char *ptr; указатель на ранее захваченный блок памяти
unsigned size; новый размер в байтах
Описание.
Функция _expand изменяет размер ранее захваченных блоков памяти, пытаясь расширить или сузить блок без передвижения его местоположения в heap.
Аргумент ptr указывает на начало блока. Аргумент size задает новый размер блока в байтах. Содержимое блоков не изменяется.
Аргумент ptr также указывает на освобождающийся блок до тех пор, пока не будут внешне вызваны calloc , _expand , halloc , malloc или realloc , либо пока блок будет свободен.
Если ptr указывает на освобожденный блок, то этот блок остается свободным и после вызова _expand.
Возвращаемое значение.
Функция _expand возвращает char -указатель на перезахваченный блок памяти. В отличии от realloc , _expand не может передвигать блок и изменять его размеры. Это означает, что аргумент ptr для _expand является тем же самым, что и возвращаемое значение, если памяти достаточно, чтобы расширить блок без его передвижения.
Возвращается значение NULL , если памяти недостаточно для расширения блока. В этом случае объект, на который указывает ptr , будет расширен настолько, насколько позволяет его расположение.
В памяти, на которую указывает возвращаемое значение, гарантировано выравнивание для хранения любого типа объекта.
Новый размер объекта может быть проверен функцией _msize.
Чтобы получить указатель, тип которого отличен от char , используется преобразователь типа возвращаемого значения.
Пример:
#include <stdio.h>
#include <malloc.h>
main()
{
long *oldptr;
unsigned int newsize=64000;
oldptr=(long*)malloc(10000*sizeof(long));
printf("Size of memory block pointed to by
oldptr=%u\n", _msize(oldptr));
if (_expand(oldptr,newsize)!= NULL)
printf("expand was able to increase block
to %u\n", _msize(oldptr));
else
printf("expand was able to increase block to
only %u\n", _msize(oldptr));
}